Function.prototype.myBind = function () {
  var args = arguments;
  // 获取到新的上下文
  var context = args[0];
  console.log("context", context);
  // 保存当前的函数
  var func = this;
  // 获取其他的参数
  var thisArgs = Array.prototype.slice.call(args, 1);
  var returnFunc = function () {
    // 将两次获取到的参数合并
    Array.prototype.push.apply(thisArgs, arguments);
    console.log("context", context);
    // 使用apply改变上下文
    return func.apply(context, thisArgs);
  };
  return returnFunc;
};

function getName() {
  console.log(this.name);
}

const obj1 = {
  name: "obj1",
};

const obj2 = {
  name: "obj2",
};

const bound1 = getName.myBind(obj2).myBind(obj1);

bound1();
